﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;

namespace UBCon.Navigation
{
    public sealed class ButtonChrome : ContentControl
    {
        #region Constructors

        static ButtonChrome()
        {
            Type ownerType = typeof(ButtonChrome);
            ButtonChrome.DefaultStyleKeyProperty.OverrideMetadata(ownerType,
                  new FrameworkPropertyMetadata(ownerType)
                  );
            ButtonChrome.FocusableProperty.OverrideMetadata
                (
                  ownerType,
                  new FrameworkPropertyMetadata(false)
                );
        }

        public ButtonChrome()
        {

        }

        #endregion

        #region Properties and Depenency Properties

        [Bindable(true),
        Browsable(false)]
        public CornerRadius CornerRadius
        {
            get { return (CornerRadius)GetValue(CornerRadiusProperty); }
            set { SetValue(CornerRadiusProperty, value); }
        }

        // Using a DependencyProperty as the backing store for CornerRadius.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty CornerRadiusProperty =
            DependencyProperty.Register("CornerRadius", typeof(CornerRadius), typeof(ButtonChrome),
            new FrameworkPropertyMetadata(new CornerRadius(0.0D)));

        [Bindable(true),
        Browsable(false)]
        public CornerRadius InnerBorderCornerRadius
        {
            get { return (CornerRadius)GetValue(InnerBorderCornerRadiusProperty); }
            set { SetValue(InnerBorderCornerRadiusProperty, value); }
        }

        // Using a DependencyProperty as the backing store for InnerBorderCornerRadius.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty InnerBorderCornerRadiusProperty =
            DependencyProperty.Register("InnerBorderCornerRadius", typeof(CornerRadius), typeof(ButtonChrome),
            new FrameworkPropertyMetadata(new CornerRadius(0D)));

        [Bindable(true),
        Browsable(false)]
        public Thickness InnerBorderThickness
        {
            get { return (Thickness)GetValue(InnerBorderThicknessProperty); }
            set { SetValue(InnerBorderThicknessProperty, value); }
        }

        // Using a DependencyProperty as the backing store for InnerBorderThickness.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty InnerBorderThicknessProperty =
            DependencyProperty.Register("InnerBorderThickness", typeof(Thickness), typeof(ButtonChrome),
            new FrameworkPropertyMetadata(new Thickness(0D)));

        [Bindable(true),
        Browsable(false)]
        public Brush InnerBorderBrush
        {
            get { return (Brush)GetValue(InnerBorderBrushProperty); }
            set { SetValue(InnerBorderBrushProperty, value); }
        }

        // Using a DependencyProperty as the backing store for InnerBorderBrush.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty InnerBorderBrushProperty =
            DependencyProperty.Register("InnerBorderBrush", typeof(Brush), typeof(ButtonChrome));

        [Bindable(true),
        Browsable(false)]
        public bool AnimateTransition
        {
            get { return (bool)GetValue(AnimateTransitionProperty); }
            set { SetValue(AnimateTransitionProperty, value); }
        }

        // Using a DependencyProperty as the backing store for AnimateTransition.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty AnimateTransitionProperty =
            DependencyProperty.Register("AnimateTransition", typeof(bool), typeof(ButtonChrome), new FrameworkPropertyMetadata(false));


        [Bindable(true),
        Browsable(false)]
        public bool RenderPressed
        {
            get { return (bool)GetValue(RenderPressedProperty); }
            set { SetValue(RenderPressedProperty, value); }
        }

        // Using a DependencyProperty as the backing store for RenderPressed.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty RenderPressedProperty =
            DependencyProperty.Register("RenderPressed", typeof(bool), typeof(ButtonChrome));

        [Bindable(true),
        Browsable(false)]
        public bool RenderMouseOver
        {
            get { return (bool)GetValue(RenderMouseOverProperty); }
            set { SetValue(RenderMouseOverProperty, value); }
        }

        // Using a DependencyProperty as the backing store for RenderMouseOver.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty RenderMouseOverProperty =
            DependencyProperty.Register("RenderMouseOver", typeof(bool), typeof(ButtonChrome), new FrameworkPropertyMetadata(false));

        [Bindable(true), Browsable(false)]
        public Brush MouseOverBorderBrush
        {
            get { return (Brush)GetValue(MouseOverBorderBrushProperty); }
            set { SetValue(MouseOverBorderBrushProperty, value); }
        }

        // Using a DependencyProperty as the backing store for MouseOverBorderBrush.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty MouseOverBorderBrushProperty =
            DependencyProperty.Register("MouseOverBorderBrush", typeof(Brush), typeof(ButtonChrome));

        [Bindable(true), Browsable(false)]
        public Brush MouseOverBackgroundBrush
        {
            get { return (Brush)GetValue(MouseOverBackgroundBrushProperty); }
            set { SetValue(MouseOverBackgroundBrushProperty, value); }
        }

        // Using a DependencyProperty as the backing store for MouseOverBackgroundBrush.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty MouseOverBackgroundBrushProperty =
            DependencyProperty.Register("MouseOverBackgroundBrush", typeof(Brush), typeof(ButtonChrome));


        [Bindable(true),
        Browsable(false)]
        public System.Windows.Media.Brush PressedBackgroundBrush
        {
            get { return (System.Windows.Media.Brush)GetValue(PressedBackgroundBrushProperty); }
            set { SetValue(PressedBackgroundBrushProperty, value); }
        }

        // Using a DependencyProperty as the backing store for PressedBackgroundBrush.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty PressedBackgroundBrushProperty =
            DependencyProperty.Register("PressedBackgroundBrush", typeof(Brush), typeof(ButtonChrome));

        [Bindable(true), Browsable(false)]
        public Brush PressedBorderBrush
        {
            get { return (Brush)GetValue(PressedBorderBrushProperty); }
            set { SetValue(PressedBorderBrushProperty, value); }
        }

        // Using a DependencyProperty as the backing store for PressedBorderBrush.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty PressedBorderBrushProperty =
            DependencyProperty.Register("PressedBorderBrush", typeof(Brush), typeof(ButtonChrome));

        [Bindable(true), Browsable(false)]
        public bool AnimatesSlowly
        {
            get { return (bool)GetValue(AnimatesSlowlyProperty); }
            set { SetValue(AnimatesSlowlyProperty, value); }
        }

        // Using a DependencyProperty as the backing store for AnimatesSlow.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty AnimatesSlowlyProperty =
            DependencyProperty.Register("AnimatesSlowly", typeof(bool), typeof(ButtonChrome), new FrameworkPropertyMetadata(false));

        #endregion

        #region Depenency Property Changed Callbacks
        #endregion

        #region Overrieds

        #endregion

        #region Private Utilities
        #endregion

        #region Event Handlers

        #endregion

        #region Fields
        #endregion


    }
}
